home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / moreuselssprgs.lha / SamLongPlay.AMOS / SamLongPlay.amosSourceCode
AMOS Source Code  |  1997-04-15  |  2KB  |  85 lines

  1. '
  2. ' SamLongPlay Procedures V1.0
  3. '
  4. ' Written by Christopher Hodges
  5. '
  6. Dim SDAT(3,8)
  7. Global SDAT()
  8. End 
  9. Procedure SAMLP[F$,V,FREQ,LOP,QUIT,BANK,BUF]
  10.   VV=1 : If V Then For A=1 To V : Add VV,VV : Next 
  11.   Erase BANK : Reserve As Chip Work BANK,BUF*1048
  12.   Open In V+1,F$
  13.   LS=Lof(V+1) : LB=BUF*512
  14.   B=0 : FL=0 : S=Start(BANK) : L=LS
  15.   Repeat 
  16.     LL=Min(L,LB)
  17.     If L-LL>0 and L-LL<LB/2 Then LL=LB/2
  18.     Sload V+1 To S+B*LB,LL
  19.     If FL
  20.       Sam Swap VV To S+B*LB,LL
  21.       While Sam Swapped(V)=0
  22.         If((Inkey$<>"") and(QUIT and 1)) or((Mouse Key>0) and(QUIT and 2))
  23.           Sam Stop VV
  24.           Close V+1
  25.           Erase BANK
  26.           Pop Proc
  27.         End If 
  28.       Wend 
  29.     Else 
  30.       Sam Raw VV,S+B*LB,LL,FREQ
  31.       FL=1
  32.     End If 
  33.     B=1-B
  34.     Add L,-LL
  35.     If L=0 and LOP>-1 Then Pof(V+1)=LOP : L=LS-LOP+1
  36.   Until L=0
  37.   Fill S+B*LB To S+B*LB+LB,0
  38.   Sam Swap VV To S+B*LB,LB
  39.   While Sam Swapped(V)=0 : Wend 
  40.   Sam Stop VV
  41.   Close V+1
  42.   Erase BANK
  43. End Proc
  44. Procedure SETSAM[F$,V,FREQ,LOP,BANK,BUF]
  45.   VV=1 : If V Then For A=1 To V : Add VV,VV : Next 
  46.   SDAT(V,0)=VV
  47.   SDAT(V,1)=BANK
  48.   Erase BANK : Reserve As Chip Work BANK,BUF*1048
  49.   Open In V+1,F$
  50.   SDAT(V,2)=Lof(V+1) : SDAT(V,3)=BUF*512
  51.   SDAT(V,4)=SDAT(V,2) : SDAT(V,5)=0 : SDAT(V,6)=0
  52.   SDAT(V,7)=LOP : SDAT(V,8)=FREQ
  53. End Proc
  54. Procedure MANLP[V]
  55.   If Sam Swapped(V)=0 or SDAT(V,4)=0 Then Pop Proc
  56.   S=Start(SDAT(V,1))
  57.   L=SDAT(V,4) : LB=SDAT(V,3)
  58.   LL=Min(L,LB) : VV=SDAT(V,0)
  59.   If L-LL>0 and L-LL<LB/2 Then LL=LB/2
  60.   A=SDAT(V,5)*LB
  61.   Sload V+1 To S+A,LL
  62.   If SDAT(V,6)
  63.     Sam Swap VV To S+A,LL
  64.   Else 
  65.     Sam Raw VV,S+A,LL,SDAT(V,8)
  66.     SDAT(V,6)=1
  67.   End If 
  68.   SDAT(V,5)=1-SDAT(V,5)
  69.   Add L,-LL
  70.   If L=0 and SDAT(V,7)>-1 Then Pof(V+1)=SDAT(V,7) : L=SDAT(V,2)-SDAT(V,7)
  71.   SDAT(V,4)=L
  72. End Proc[SDAT(V,4)]
  73. Procedure FINSAM[V]
  74.   Sam Stop SDAT(V,0)
  75.   Close V+1
  76.   Erase SDAT(V,1)
  77. End Proc
  78. Procedure WAISAM[V]
  79.   S=Start(SDAT(V,1))
  80.   LB=SDAT(V,3)
  81.   A=SDAT(V,5)*LB
  82.   Fill S+A To S+A+LB,0
  83.   Sam Swap SDAT(V,0) To S+A,LB
  84.   While Sam Swapped(V)=0 : Wend 
  85. End Proc